What is readable-stream?
The readable-stream package is a userland stream module, compatible with the built-in stream module provided by Node.js. It offers the same interface and functionality as the native module, but with additional updates and bug fixes. It is particularly useful for ensuring consistent stream behavior across different Node.js versions.
What are readable-stream's main functionalities?
Creating a readable stream
This feature allows you to create a readable stream that you can pipe to other streams or consume manually. The 'read' method is called when the stream wants to pull more data.
const { Readable } = require('readable-stream');
const myReadableStream = new Readable({
read(size) {
this.push('some data');
this.push(null); // No more data
}
});
myReadableStream.on('data', (chunk) => {
console.log(chunk.toString());
});
Creating a writable stream
This feature allows you to create a writable stream where you can write data. The 'write' method is called when the stream receives data to write.
const { Writable } = require('readable-stream');
const myWritableStream = new Writable({
write(chunk, encoding, callback) {
process.stdout.write(chunk);
callback();
}
});
process.stdin.pipe(myWritableStream);
Creating a transform stream
This feature allows you to create a transform stream that can modify data as it is read from a readable stream before it is written to a writable stream.
const { Transform } = require('readable-stream');
const myTransformStream = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase());
callback();
}
});
process.stdin.pipe(myTransformStream).pipe(process.stdout);
Creating a duplex stream
This feature allows you to create a duplex stream that is both readable and writable. It can be used to read data from one source and write to another.
const { Duplex } = require('readable-stream');
const myDuplexStream = new Duplex({
read(size) {
this.push('data from read method');
this.push(null);
},
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
}
});
myDuplexStream.on('data', (chunk) => {
console.log(chunk.toString());
});
myDuplexStream.write('data for write method');
Other packages similar to readable-stream
through2
Through2 is a tiny wrapper around Node.js streams.Transform that makes it easier to create transform streams. It is similar to readable-stream's Transform, but with a simpler API for most common use cases.
highland
Highland.js manages synchronous and asynchronous code easily, using nothing more than standard JavaScript and Node-like streams. It is more functional in nature compared to readable-stream and provides a higher level abstraction for handling streams.
stream-browserify
Stream-browserify is a browser-compatible version of Node.js' core stream module, similar to readable-stream. It allows the use of Node.js-style streams in the browser, but it is specifically designed to polyfill the native Node.js stream module for browser use.
bl
Buffer List (bl) is a storage object for collections of Node Buffers, which can be used with streams. Unlike readable-stream, it focuses on buffering and manipulating binary data rather than providing the stream API itself.
readable-stream
Node-core v8.17.0 streams for userland
npm install --save readable-stream
Node-core streams for userland
This package is a mirror of the Streams2 and Streams3 implementations in
Node-core.
Full documentation may be found on the Node.js website.
If you want to guarantee a stable streams base, regardless of what version of
Node you, or the users of your libraries are using, use readable-stream only and avoid the "stream" module in Node-core, for background see this blogpost.
As of version 2.0.0 readable-stream uses semantic versioning.
Streams Working Group
readable-stream
is maintained by the Streams Working Group, which
oversees the development and maintenance of the Streams API within
Node.js. The responsibilities of the Streams Working Group include:
- Addressing stream issues on the Node.js issue tracker.
- Authoring and editing stream documentation within the Node.js project.
- Reviewing changes to stream subclasses within the Node.js project.
- Redirecting changes to streams from the Node.js project to this
project.
- Assisting in the implementation of stream providers within Node.js.
- Recommending versions of
readable-stream
to be included in Node.js. - Messaging about the future of streams to give the community advance
notice of changes.
Team Members